前端那些事

vuePress-theme-reco chenpeng    2020 - 2021
前端那些事 前端那些事

Choose mode

  • dark
  • auto
  • light
首页
文章目录
  • Browser
  • CSS
  • ES6
  • JavaScript
  • Network
  • TypeScript
  • Vue
  • Vue3
  • Webpack
标签
时间轴
GitHub
author-avatar

chenpeng

85

Article

25

Tag

首页
文章目录
  • Browser
  • CSS
  • ES6
  • JavaScript
  • Network
  • TypeScript
  • Vue
  • Vue3
  • Webpack
标签
时间轴
GitHub
  • TypeScript

    • TypeScript基本概念
    • TypeScript的静态类型
    • TypeScript数组类型注解
    • TypeScript中interface与type的区别

TypeScript中interface与type的区别

vuePress-theme-reco chenpeng    2020 - 2021

TypeScript中interface与type的区别

chenpeng 2020-12-01 TS

# interface 与 type 的区别

interface 用于声明接口,type 用于声明类型别名

# 相同点

1.都可以描述一个对象或方法

interface

interface User {
  name: string
  age: number
}

interface SetUser {
  (name: string, age: number): void;
}
1
2
3
4
5
6
7
8

type

type User = {
  name: string
  age: number
};

type SetUser = (name: string, age: number): void;
1
2
3
4
5
6

2.interface 可以继承 interface 或 type

interface Name{
    name: string
}

interface User extends Name{
    age: number
}
1
2
3
4
5
6
7
type Age = {
    age: number
}

interface User extends Age{
    name: string
}
1
2
3
4
5
6
7

3.type 可以与 interface 或者 type 交叉

interface Name{
    name: string
}

type User = Name & {
    age: number
}
1
2
3
4
5
6
7
type Name = {
    name: string
}

type User = Name & {
    age: number
}
1
2
3
4
5
6
7

# 不同点

type 可以声明基本类型别名,联合类型,元组等类型

基本类型

type Name = string
1

联合类型

interface Dog{
    wang(): string
}

interface Cat{
    miao(): string
}

type Pet = Dog | Cat
1
2
3
4
5
6
7
8
9

元组(具体定义数组每个位置的类型)

type Arr = [string, number]
1

type 还可以使用 typeof 获取实例的类型进行赋值

let div = document.createElement('div');
type B = typeof div
1
2

interface 可以声明合并

interface User {
  name: string
  age: number
}

interface User {
  sex: string
}

/*
User 接口为 {
  name: string
  age: number
  sex: string
}
*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16